//二次封装axios
import axios from 'axios'
import { Message } from 'element-ui'
import router from '@/router'
import Nprogress from 'nprogress'

//引入环境地址
import envConfig from './env'

//创建axios实例
const service = axios.create({
    baseURL: envConfig.prodEnv.baseURL,
    timeout:5000
})


//设置请求拦截器
service.interceptors.request.use(config => {
    Nprogress.start()
    console.log('请求拦截:', config)
     //只要不是登录页，其他页面需要token，在请求拦截器中去携带
    if (config.url !== '/login') {
        const token=sessionStorage.getItem('token')
        token && (config.headers['Authorization']=token)
    } 
   
    return config
},error=>{})


//请求响应拦截器
service.interceptors.response.use(res => {
    Nprogress.done()
    console.log('响应拦截器res:',res)
    const { meta: { msg, status: code }}=res.data;
    //后台成功返回的状态码
    const successStatusArr = [200, 201, 204]
    if (successStatusArr.includes(code)) {
        const { data: result } = res.data;
        //如果是登录成功，则将后台返回的token保存到本地
        if (res.config.url === '/login') {
            sessionStorage.setItem('token', result.token)
            router.push('/home')
         }
        //成功的提示
        Message({
            message: msg,
            type:'success'
        })

        //返回成功后的数据
        return result;
    }
    
    //失败
    Message({
        message: msg,
        type:'error'
    })

    if (msg === '无效token') {
        router.push('/login')
     }
    return Promise.reject(msg)
}, error => { })

export default service;